package com.farm.portal.service;

import com.farm.portal.domain.Componentdef;
import com.farm.portal.domain.Portal;
import com.farm.portal.domain.Portaltree;
import com.farm.core.auth.domain.LoginUser;
import com.farm.core.sql.query.DataQuery;

/* *
 *功能：门户配置服务类接口
 *详细：
 *
 *版本：v0.1
 *作者：Farm代码工程自动生成
 *日期：20141122211253
 *说明：
 */
public interface PortalServiceInter {

	/**
	 * 构建树的节点类型
	 * 
	 * @author Administrator
	 * 
	 */
	public enum NODE_TYPE {
		CATEGORY("1"), PORTAL("2"), COMPONENT("3");
		String val;

		NODE_TYPE(String val) {
			this.val = val;
		}

		public String getVal() {
			return val;
		}
	}

	/**
	 * 创建一个基本查询用来查询当前实体管理实体
	 * 
	 * @param query
	 *            传入的查询条件封装
	 * @return
	 */
	public DataQuery createPortaltreeSimpleQuery(DataQuery query);

	/**
	 * 增加一个分类
	 * 
	 * @param name
	 * @param sort
	 * @param currentUser
	 * @return
	 */
	public Portaltree insertCategory(String name, int sort,
			LoginUser currentUser);

	/**
	 * 增加一个组件
	 * 
	 * @param name
	 *            组件名称
	 * @param sort
	 *            排序
	 * @param portalId
	 *            门户id
	 * @param componentid
	 *            组件模型ID
	 * @param openable
	 *            是否显示
	 * @param closable
	 *            是否可以关闭
	 * @param collapsible
	 *            是否可以折叠
	 * @param width
	 *            宽度百分比
	 * @param heitgh
	 *            高度像素
	 * @param currentUser
	 *            当前用户
	 * @return
	 */
	public Portaltree insertComponent(String name, int sort, String portalId,
			String componentid, String openable, String closable,
			String collapsible, int width, int heitgh, LoginUser currentUser);

	/**
	 * 增加一个门户定义
	 * 
	 * @param categoryId
	 *            分类id
	 * 
	 * @param name
	 *            门户名称
	 * 
	 * @param sort
	 *            排序
	 * @param colnum
	 *            列数量
	 * @param colwidth
	 *            列的宽度，如：（33%,33%,33%）
	 * @param currentUser
	 *            当前用户
	 * @return
	 */
	public Portaltree insertPortal(String name, int sort, String keyStr,
			String categoryId, int colnum, String colwidth,
			LoginUser currentUser);

	/**
	 * 修改一个分类
	 * 
	 * @param treeNodeId
	 *            节点id
	 * @param name
	 *            分类名称
	 * @param sort
	 *            排序
	 * @param currentUser
	 * @return
	 */
	public Portaltree editCategory(String treeNodeId, String name, int sort,
			LoginUser currentUser);

	/**
	 * 修改一个门户
	 * 
	 * @param treeNodeId
	 *            节点id
	 * @param name
	 *            门户名称
	 * @param sort
	 *            排序
	 * @param keyStr
	 * @param colnum
	 *            列数
	 * @param colwidth
	 *            列的宽度，如：（33%,33%,33%）
	 * @param currentUser
	 * @return
	 */
	public Portaltree editPortal(String treeNodeId, String name, int sort,
			String keyStr, int colnum, String colwidth, LoginUser currentUser);

	/**
	 * 修改一个组件
	 * 
	 * @param treeNodeId
	 *            节点id
	 * @param name
	 *            组件名称
	 * @param sort
	 *            排序
	 * @param categoryid
	 *            分类id
	 * @param componentid
	 *            组件模型ID
	 * @param openable
	 *            是否显示
	 * @param closable
	 *            是否可以关闭
	 * @param collapsible
	 *            是否可以折叠
	 * @param width
	 *            宽度百分比
	 * @param heitgh
	 *            高度像素
	 * @param currentUser
	 *            当前用户
	 * @return
	 */
	public Portaltree editComponent(String treeNodeId, String name, int sort,
			String categoryid, String componentid, String openable,
			String closable, String collapsible, int width, int heitgh,
			LoginUser currentUser);

	/**
	 * 删除一个配置节点（可以是分类、门户、组件）
	 * 
	 * @param treeNodeId
	 * @param currentUser
	 */
	public void deleteTreeNode(String treeNodeId, LoginUser currentUser);

	/**
	 * 获得配置节点
	 * 
	 * @param ids
	 * @return
	 */
	public Portaltree getTreeNode(String treeNodeId);

	/**
	 * 获得门户定义
	 * 
	 * @param portaldefid
	 * @return
	 */
	public Portal getPortalDef(String portaldefid);

	/**
	 * 获得组件定义
	 * 
	 * @param componentdefid
	 * @return
	 */
	public Componentdef getComponentDef(String componentdefid);

	/**
	 * 获得用户门户实例
	 * 
	 * @param key
	 * @param currentUser
	 * @return
	 */
	public Portal getUserPortal(String key, LoginUser currentUser);

	/**
	 * 关闭用户组件
	 * 
	 * @param portalKEY
	 * @param componentDefId
	 * @param currentUser
	 * @return
	 */
	public Componentdef closeUserComponent(String portalKEY, String componentDefId,
			LoginUser currentUser);

	/**
	 * 打开用户组件
	 * 
	 * @param portalKEY
	 * @param componentDefId
	 * @param currentUser
	 * @return
	 */
	public Componentdef openUserComponent(String portalKEY, String componentDefId,
			LoginUser currentUser);
}